#ifndef INFOMOVIMIENTO_H
#define	INFOMOVIMIENTO_H

//#include "TuplaAleatoria.h"
#include "../XML/tinyxml.h"

/**
 * Estructura para empaquetar la información correspondiente a los rangos entre
 * los que pueden variar los parámetros de movimiento de un objeto (posición, 
 * velocidad y aceleración) en 2D.
 */

// m: mínimo
// M: máximo

//using namespace TP::Juego::Arena::Utilidades;

namespace TP { namespace Juego { namespace Motorizacion { namespace Generadores {

typedef int num_t;
typedef double prob_t;
typedef num_t pos_t;
typedef num_t speed_t;
typedef num_t accel_t;
    
struct InfoMov {
    
    pos_t _pXm, _pXM, _pYm, _pYM;
    speed_t _vXm, _vXM, _vYm, _vYM;
    accel_t _aXm, _aXM, _aYm, _aYM;
    prob_t _prob_rojo, _prob_azul, _prob_verde;
    
    // Carga las semillas para generer el movimiento
    void cargarSemillasMovimiento(pos_t pXm, pos_t pXM, pos_t pYm, pos_t pYM,
    speed_t vXm, speed_t vXM, speed_t vYm, speed_t vYM, accel_t aXm,
    accel_t aXM, accel_t aYm, accel_t aYM) {
        
    _pXm = pXm;
    _pXM = pXM;
    _pYm = pYm;
    _pYM = pYM;
    _vXm = vXm;
    _vXM = vXM;
    _vYm = vYm;
    _vYM = vYM;    
    _aXm = aXm;
    _aXM = aXM;
    _aYm = aYm;
    _aYM = aYM;
        
    };
    
    // Carga las semillas para generar las probabilidades de disparos de pájaros.
    void cargarSemillasProb(prob_t prob_rojo, prob_t prob_azul, prob_t prob_verde) {
        _prob_rojo = prob_rojo;
        _prob_azul = prob_azul;
        _prob_verde = prob_verde;
    }
    
void deElementoXML (TiXmlElement* pElemento){

    if (strcmp (pElemento->Value(), "INFOMOVIMIENTO") == 0) {
        TiXmlElement * posicionElement = pElemento->FirstChildElement();
        TiXmlElement * velocidadElement = posicionElement->NextSiblingElement();
        TiXmlElement * aceleracionElement = velocidadElement->NextSiblingElement();
        TiXmlElement * probElement = aceleracionElement->NextSiblingElement();
        posicionElement->Attribute("xi", &_pXm);
        posicionElement->Attribute("xf", &_pXM);
        posicionElement->Attribute("yi", &_pYm);
        posicionElement->Attribute("yf", &_pYM);
        velocidadElement->Attribute("vxi", &_vXm);
        velocidadElement->Attribute("vxf", &_vXM);
        velocidadElement->Attribute("vyi", &_vYm);
        velocidadElement->Attribute("vyf", &_vYM);
        aceleracionElement->Attribute("axi", &_aXm);
        aceleracionElement->Attribute("axf", &_aXM);
        aceleracionElement->Attribute("ayi", &_aYm);
        aceleracionElement->Attribute("ayf", &_aYM);
        probElement->Attribute("pr", &_prob_rojo);
        probElement->Attribute("pa", &_prob_azul);
        probElement->Attribute("pv", &_prob_verde);
    }
}


TiXmlElement* aElementoXML (){
    TiXmlElement * element = new TiXmlElement("INFOMOVIMIENTO");
    TiXmlElement * posicionElement = new TiXmlElement("POSICION");
    TiXmlElement * velocidadElement = new TiXmlElement("VELOCIDAD");
    TiXmlElement * aceleracionElement = new TiXmlElement("ACELERACION");
    TiXmlElement * probElement = new TiXmlElement("PROBABILIDADES");
    posicionElement->SetAttribute("xi",this->_pXm);
    posicionElement->SetAttribute("xf",this->_pXM);
    posicionElement->SetAttribute("yi",this->_pYm);
    posicionElement->SetAttribute("yf",this->_pYM);
    velocidadElement->SetAttribute("vxi",this->_vXm);
    velocidadElement->SetAttribute("vxf",this->_vXM);
    velocidadElement->SetAttribute("vyi",this->_vYm);
    velocidadElement->SetAttribute("vyf",this->_vYM);
    aceleracionElement->SetAttribute("axi",this->_aXm);
    aceleracionElement->SetAttribute("axf",this->_aXM);
    aceleracionElement->SetAttribute("ayi",this->_aYm);
    aceleracionElement->SetAttribute("ayf",this->_aYM);
    probElement->SetDoubleAttribute("pr",this->_prob_rojo);
    probElement->SetDoubleAttribute("pa",this->_prob_azul);
    probElement->SetDoubleAttribute("pv",this->_prob_verde);
    element->LinkEndChild(posicionElement);
    element->LinkEndChild(velocidadElement);
    element->LinkEndChild(aceleracionElement);
    element->LinkEndChild(probElement);
    return element;
}
};

}}}}

#endif	/* INFOMOVIMIENTO_H */

